Otključajte moć podataka vremenskih serija pomoću prozorskih funkcija. Vodič pokriva ključne koncepte, primjere i napredne tehnike za analizu podataka.
Analitika vremenskih serija: Ovladavanje prozorskim funkcijama za uvid u podatke
Podaci vremenskih serija, koje karakterizira njihova sekvencijalna i vremenski ovisna priroda, sveprisutni su u raznim industrijama. Od praćenja cijena dionica i nadzora prometa na web stranicama do analize očitanja senzora i predviđanja prodajnih trendova, sposobnost izvlačenja smislenih uvida iz podataka vremenskih serija ključna je za donošenje informiranih odluka. Prozorske funkcije pružaju moćan i fleksibilan skup alata za izvođenje izračuna na skupu redaka koji su povezani s trenutnim retkom u tablici ili podatkovnom okviru, što ih čini neophodnima za analizu vremenskih serija.
Razumijevanje podataka vremenskih serija
Podaci vremenskih serija su niz podatkovnih točaka indeksiranih po vremenskom redoslijedu. Podatkovne točke mogu predstavljati različite metrike, kao što su:
- Financijski podaci: Cijene dionica, tečajevi, volumeni trgovanja
- Prodajni podaci: Dnevni, tjedni ili mjesečni podaci o prodaji za različite proizvode
- Senzorski podaci: Očitanja temperature, mjerenja tlaka, razine vlažnosti
- Podaci o web prometu: Posjeti web stranici, pregledi stranica, stope napuštanja stranice
- Podaci o potrošnji energije: Satna ili dnevna potrošnja električne energije
Analiza podataka vremenskih serija uključuje identificiranje uzoraka, trendova i sezonalnosti, što se može koristiti za predviđanje budućih vrijednosti, otkrivanje anomalija i optimizaciju poslovnih procesa.
Uvod u prozorske funkcije
Prozorske funkcije, poznate i kao prozorske agregacije ili analitičke funkcije, omogućuju vam izvođenje izračuna na skupu redaka povezanih s trenutnim retkom, bez grupiranja redaka u jedan rezultatski skup kao što to čine tradicionalne agregatne funkcije (npr. SUM, AVG, COUNT). Ova je mogućnost posebno korisna za analizu vremenskih serija, gdje često trebate izračunati pomične prosjeke, kumulativne zbrojeve i druge metrike temeljene na vremenu.
Prozorska funkcija se obično sastoji od sljedećih komponenti:
- Funkcija: Izračun koji se treba izvršiti (npr. AVG, SUM, RANK, LAG).
- Klauzula OVER: Definira prozor redaka koji se koristi za izračun.
- Klauzula PARTITION BY (opcionalno): Dijeli podatke u particije, a prozorska funkcija primjenjuje se na svaku particiju neovisno.
- Klauzula ORDER BY (opcionalno): Određuje redoslijed redaka unutar svake particije.
- Klauzula ROWS/RANGE (opcionalno): Definira okvir prozora, što je skup redaka u odnosu na trenutni redak koji se koristi za izračun.
Ključni koncepti i sintaksa
1. Klauzula OVER()
Klauzula OVER()
srce je prozorske funkcije. Ona definira prozor redaka na kojem će funkcija djelovati. Jednostavna klauzula OVER()
bez argumenata smatrat će cijeli rezultatski skup prozorom. Na primjer:
Primjer u SQL-u:
SELECT
date,
sales,
AVG(sales) OVER()
FROM
sales_data;
Ovaj upit izračunava prosječnu prodaju za sve datume u tablici sales_data
.
2. PARTITION BY
Klauzula PARTITION BY
dijeli podatke u particije, a prozorska funkcija se primjenjuje zasebno na svaku particiju. To je korisno kada želite izračunati metrike za različite grupe unutar vaših podataka.
Primjer u SQL-u:
SELECT
date,
product_id,
sales,
AVG(sales) OVER (PARTITION BY product_id)
FROM
sales_data;
Ovaj upit izračunava prosječnu prodaju za svaki proizvod zasebno.
3. ORDER BY
Klauzula ORDER BY
određuje redoslijed redaka unutar svake particije. To je ključno za izračunavanje tekućih zbrojeva, pomičnih prosjeka i drugih metrika temeljenih na vremenu.
Primjer u SQL-u:
SELECT
date,
sales,
SUM(sales) OVER (ORDER BY date)
FROM
sales_data;
Ovaj upit izračunava kumulativni zbroj prodaje tijekom vremena.
4. ROWS/RANGE
Klauzule ROWS
i RANGE
definiraju okvir prozora, što je skup redaka u odnosu na trenutni redak koji se koristi za izračun. Klauzula ROWS
specificira okvir prozora na temelju fizičkog broja retka, dok klauzula RANGE
specificira okvir prozora na temelju vrijednosti stupca iz klauzule ORDER BY
.
Primjer s ROWS:
SELECT
date,
sales,
AVG(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
FROM
sales_data;
Ovaj upit izračunava pomični prosjek prodaje u posljednja 3 dana (uključujući trenutni dan).
Primjer s RANGE:
SELECT
date,
sales,
AVG(sales) OVER (ORDER BY date RANGE BETWEEN INTERVAL '2' DAY PRECEDING AND CURRENT ROW)
FROM
sales_data;
Ovaj upit izračunava pomični prosjek prodaje u posljednja 2 dana (uključujući trenutni dan). Imajte na umu da `RANGE` zahtijeva sortirani stupac koji je numeričkog ili datumskog/vremenskog tipa podataka.
Uobičajene prozorske funkcije za analizu vremenskih serija
1. Pomični prosjek
Pomični prosjek je široko korištena tehnika za ublažavanje kratkoročnih fluktuacija u podacima vremenskih serija i isticanje dugoročnih trendova. Izračunava se kao prosjek vrijednosti unutar određenog vremenskog prozora.
Primjer u SQL-u:
SELECT
date,
sales,
AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_7_days
FROM
sales_data;
Ovaj upit izračunava 7-dnevni pomični prosjek prodaje.
Primjer u Pythonu (koristeći Pandas):
import pandas as pd
# Pretpostavljajući da imate Pandas DataFrame nazvan 'sales_df' sa stupcima 'date' i 'sales'
sales_df['moving_average_7_days'] = sales_df['sales'].rolling(window=7).mean()
Primjer globalne primjene: Multinacionalni maloprodajni lanac mogao bi koristiti 30-dnevni pomični prosjek kako bi ublažio dnevne fluktuacije prodaje i identificirao temeljne prodajne trendove u različitim regijama.
2. Kumulativni zbroj
Kumulativni zbroj, poznat i kao tekući zbroj, izračunava zbroj vrijednosti do trenutnog retka. Koristan je za praćenje ukupne akumulirane vrijednosti tijekom vremena.
Primjer u SQL-u:
SELECT
date,
sales,
SUM(sales) OVER (ORDER BY date) AS cumulative_sales
FROM
sales_data;
Ovaj upit izračunava kumulativni zbroj prodaje tijekom vremena.
Primjer u Pythonu (koristeći Pandas):
import pandas as pd
# Pretpostavljajući da imate Pandas DataFrame nazvan 'sales_df' sa stupcima 'date' i 'sales'
sales_df['cumulative_sales'] = sales_df['sales'].cumsum()
Primjer globalne primjene: Međunarodna e-commerce tvrtka može koristiti kumulativnu prodaju za praćenje ukupnog prihoda ostvarenog od lansiranja novog proizvoda na različitim tržištima.
3. Lead i Lag
Funkcije LEAD
i LAG
omogućuju pristup podacima iz sljedećih, odnosno prethodnih redaka. Korisne su za izračunavanje promjena u odnosu na prethodno razdoblje, identificiranje trendova i usporedbu vrijednosti u različitim vremenskim razdobljima.
Primjer u SQL-u:
SELECT
date,
sales,
LAG(sales, 1, 0) OVER (ORDER BY date) AS previous_day_sales,
sales - LAG(sales, 1, 0) OVER (ORDER BY date) AS sales_difference
FROM
sales_data;
Ovaj upit izračunava razliku u prodaji u usporedbi s prethodnim danom. Funkcija `LAG(sales, 1, 0)` dohvaća vrijednost prodaje iz prethodnog retka (pomak 1), a ako prethodni redak ne postoji (npr. prvi redak), vraća 0 (zadanu vrijednost).
Primjer u Pythonu (koristeći Pandas):
import pandas as pd
# Pretpostavljajući da imate Pandas DataFrame nazvan 'sales_df' sa stupcima 'date' i 'sales'
sales_df['previous_day_sales'] = sales_df['sales'].shift(1)
sales_df['sales_difference'] = sales_df['sales'] - sales_df['previous_day_sales'].fillna(0)
Primjer globalne primjene: Globalna zrakoplovna tvrtka može koristiti funkcije lead i lag za usporedbu prodaje karata za istu rutu u različitim tjednima i identificiranje potencijalnih fluktuacija potražnje.
4. Rank i Dense Rank
Funkcije RANK()
i DENSE_RANK()
dodjeljuju rang svakom retku unutar particije na temelju navedenog redoslijeda. RANK()
dodjeljuje rangove s prazninama (npr. 1, 2, 2, 4), dok DENSE_RANK()
dodjeljuje rangove bez praznina (npr. 1, 2, 2, 3).
Primjer u SQL-u:
SELECT
date,
sales,
RANK() OVER (ORDER BY sales DESC) AS sales_rank,
DENSE_RANK() OVER (ORDER BY sales DESC) AS sales_dense_rank
FROM
sales_data;
Ovaj upit rangira vrijednosti prodaje u padajućem redoslijedu.
Primjer globalne primjene: Globalno online tržište može koristiti funkcije rangiranja za identifikaciju najprodavanijih proizvoda u svakoj zemlji ili regiji.
Napredne tehnike i primjene
1. Kombiniranje prozorskih funkcija
Prozorske funkcije mogu se kombinirati za izvođenje složenijih izračuna. Na primjer, možete izračunati pomični prosjek kumulativnog zbroja.
Primjer u SQL-u:
SELECT
date,
sales,
AVG(cumulative_sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_cumulative_sales
FROM
(
SELECT
date,
sales,
SUM(sales) OVER (ORDER BY date) AS cumulative_sales
FROM
sales_data
) AS subquery;
2. Korištenje prozorskih funkcija s uvjetnom agregacijom
Možete koristiti prozorske funkcije u kombinaciji s uvjetnom agregacijom (npr. koristeći izraze CASE
) za izvođenje izračuna temeljenih na specifičnim uvjetima.
Primjer u SQL-u:
SELECT
date,
sales,
AVG(CASE WHEN sales > 100 THEN sales ELSE NULL END) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_high_sales
FROM
sales_data;
Ovaj upit izračunava pomični prosjek prodaje samo za dane kada je prodaja veća od 100.
3. Dekompozicija vremenskih serija
Prozorske funkcije mogu se koristiti za dekompoziciju vremenske serije na njezine komponente: trend, sezonalnost i rezidual. To uključuje izračunavanje pomičnih prosjeka za procjenu trenda, identificiranje sezonskih uzoraka, a zatim oduzimanje trenda i sezonskih komponenti kako bi se dobili reziduali.
4. Otkrivanje anomalija
Prozorske funkcije mogu se koristiti za otkrivanje anomalija u podacima vremenskih serija izračunavanjem pomičnih prosjeka i standardnih devijacija. Podatkovne točke koje se nalaze izvan određenog raspona (npr. +/- 3 standardne devijacije od pomičnog prosjeka) mogu se označiti kao anomalije.
Praktični primjeri u raznim industrijama
1. Financije
- Analiza cijena dionica: Izračunajte pomične prosjeke cijena dionica za identifikaciju trendova i potencijalnih signala za kupnju/prodaju.
- Upravljanje rizikom: Izračunajte pomične standardne devijacije prinosa portfelja za procjenu volatilnosti i rizika.
- Otkrivanje prijevara: Identificirajte neuobičajene obrasce transakcija usporedbom trenutnih iznosa transakcija s povijesnim prosjecima.
2. Maloprodaja
- Predviđanje prodaje: Koristite pomične prosjeke i kumulativne podatke o prodaji za predviđanje budućih prodajnih trendova.
- Upravljanje zalihama: Optimizirajte razine zaliha analizom prošlih podataka o prodaji i identificiranjem sezonskih uzoraka.
- Segmentacija kupaca: Segmentirajte kupce na temelju njihovog ponašanja pri kupnji tijekom vremena.
3. Proizvodnja
- Prediktivno održavanje: Koristite senzorske podatke s opreme za predviđanje potencijalnih kvarova i proaktivno planiranje održavanja.
- Kontrola kvalitete: Nadzirite proizvodne procese i identificirajte odstupanja od očekivanih performansi.
- Optimizacija procesa: Analizirajte proizvodne podatke kako biste identificirali uska grla i optimizirali proizvodne procese.
4. Zdravstvo
- Nadzor pacijenata: Pratite vitalne znakove pacijenata tijekom vremena i otkrijte anomalije koje mogu ukazivati na zdravstveni problem.
- Otkrivanje izbijanja bolesti: Pratite širenje bolesti i identificirajte potencijalna izbijanja.
- Alokacija zdravstvenih resursa: Alocirajte resurse na temelju potreba pacijenata i povijesnih obrazaca potražnje.
Odabir pravog alata
Prozorske funkcije dostupne su u različitim alatima za obradu podataka i programskim jezicima, uključujući:
- SQL: Većina modernih sustava za upravljanje relacijskim bazama podataka (RDBMS) podržava prozorske funkcije, uključujući PostgreSQL, MySQL (verzija 8.0+), SQL Server, Oracle i Amazon Redshift.
- Python: Knjižnica Pandas pruža izvrsnu podršku za prozorske funkcije putem metoda
rolling()
iexpanding()
. - Spark: SQL i DataFrame API-ji Apache Sparka također podržavaju prozorske funkcije.
Odabir alata ovisi o vašim specifičnim potrebama i tehničkom znanju. SQL je prikladan za podatke pohranjene u relacijskim bazama podataka, dok su Python i Spark fleksibilniji za obradu velikih skupova podataka i izvođenje složenih analiza.
Najbolje prakse
- Razumijevanje podataka: Prije primjene prozorskih funkcija, temeljito razumijte karakteristike vaših podataka vremenskih serija, uključujući njihovu frekvenciju, sezonalnost i potencijalne iznimke (outliers).
- Odabir odgovarajuće veličine prozora: Izbor veličine prozora ovisi o specifičnoj analizi koju provodite. Manja veličina prozora bit će osjetljivija na kratkoročne fluktuacije, dok će veća veličina prozora izgladiti podatke i istaknuti dugoročne trendove.
- Uzmite u obzir rubne slučajeve: Budite svjesni kako prozorske funkcije rukuju rubnim slučajevima, kao što su nedostajući podaci ili početak i kraj vremenske serije. Koristite odgovarajuće zadane vrijednosti ili tehnike filtriranja za rješavanje tih slučajeva.
- Optimizirajte performanse: Prozorske funkcije mogu biti računalno zahtjevne, posebno na velikim skupovima podataka. Optimizirajte svoje upite i kod kako biste poboljšali performanse, primjerice korištenjem odgovarajućih indeksa i strategija particioniranja.
- Dokumentirajte svoj kod: Jasno dokumentirajte svoj kod i upite kako biste objasnili svrhu i logiku prozorskih funkcija. To će drugima olakšati razumijevanje i održavanje vašeg koda.
Zaključak
Prozorske funkcije su moćan alat za analizu vremenskih serija, omogućujući vam izračun pomičnih prosjeka, kumulativnih zbrojeva, lead/lag vrijednosti i drugih metrika temeljenih na vremenu. Ovladavanjem prozorskim funkcijama možete otključati vrijedne uvide iz podataka svojih vremenskih serija i donositi informiranije odluke. Bilo da analizirate financijske podatke, podatke o prodaji, senzorske podatke ili podatke o web prometu, prozorske funkcije mogu vam pomoći identificirati uzorke, trendove i anomalije koje bi bilo teško otkriti tradicionalnim tehnikama agregacije. Razumijevanjem ključnih koncepata i sintakse prozorskih funkcija te slijedeći najbolje prakse, možete ih učinkovito iskoristiti za rješavanje širokog spektra stvarnih problema u različitim industrijama.